The Fullstack Go Framework for Prolific Web Developers.

Overview

Bud

The Fullstack Go Framework for Prolific Web Developers.

Bud writes the boring code for you, helping you launch your website faster.

Installation

Run the following command in your terminal to install bud into your $PATH:

curl -sf curl https://raw.githubusercontent.com/livebud/bud/main/install.sh | sh

You can confirm the binary is working as expected with bud -h:

Usage:
  bud [flags] [command]

Flags:
  -C, --chdir  Change the working directory

Commands:
  build    build the production server
  create   create a new project
  run      run the development server
  tool     extra tools
  version  Show package versions

Create a new project

With bud installed, you can now scaffold a new project. Let's create a minimal hackernews clone:

$ bud create hackernews
$ cd hackernews

The create command will scaffold everything you need to get started with bud.

$ ls
go.mod  node_modules/  package-lock.json  package.json

... which is not very much by the way! Unlike most other fullstack frameworks, bud starts out very minimal. As you add dependencies, bud generates all the boring code to glue your app together. Let's see this in action.

Start the development server with bud run:

$ bud run
| Listening on http://0.0.0.0:3000

Click on the link to open the browser. You'll be greeted with bud's welcome page.

Congrats! You're running your first server with bud's help.

Hello World

The welcome page is cute, but it's time to make this web app our own.

Fire up your editor and create a controller/controller.go file. Inside this file, add the following code:

package controller

type Controller struct {
}

func (c *Controller) Index() string {
  return "hello world!"
}

Then if you glance back at your browser, you should see hello world. Now we're getting somewhere!

Comments
  • Error with NPM When Running make install During Contribution Set-Up

    Error with NPM When Running make install During Contribution Set-Up

    I've been extremely impressed by and interested in but (great work @matthewmueller!!) and I wanted to begin contributing to an interesting bug that I saw in the issues. So I cloned bud and was following the instructions in Contributing.md, but I ran into an error when running make install.

    OS: Windows 10 Go Version: 1.18.2 Node.js Version: 16.14.0

    Bud_Make_NPM_Error

    help wanted 
    opened by syke99 18
  • Error: invalid cross-device link

    Error: invalid cross-device link

    When I did 'bud create ff-bud', I got this error: | rename /tmp/bud-create-3425471412 ff-bud: invalid cross-device link Possibly because /tmp is different partition than the current directory. Rename will work only in same partition?

    opened by codevin 14
  • Add Windows Support

    Add Windows Support

    Windows support is currently blocked by:

    • https://github.com/rogchap/v8go/pull/234

    Bud's compiler will also transition to using Go plugins, which also do not have Windows support yet:

    • https://github.com/golang/go/issues/19282 Though we could use something like go-plugin for Windows.

    I haven't tested it yet, but you should be able to use Bud with the Windows Subsystem for Linux (WSL).

    If you get this working, please let us know how!

    opened by matthewmueller 12
  • Can + 1 operate when the port is occupied

    Can + 1 operate when the port is occupied

    | listen tcp 127.0.0.1:3000: bind: address already in use

    For example, running on 127.0.0.1:3001 | listen tcp 127.0.0.1:3001: bind: address already in use 127.0.0.1:3002

    improvement help wanted 
    opened by Jeffrey-mu 9
  • Issue/149

    Issue/149

    This addresses #149.

    Appends the suffix "action" to all actions and the suffix "controller" to all nested controllers.

    I'm sure there's downsides to this approach, so I'm interested in your thoughts. I was able to verify that this solves the problem listed in the issue, both at the root and at other nested levels.

    Tests fail, as assertions expect certain names to exist. I can look at that if you agree with this suffix approach.

    opened by jfmario 8
  • bud  create app  fail

    bud create app fail

    run create bud_app

    | create: Unable to infer a module name. Try again using the module name.

    For example, bud create --module=github.com/my/app bud_app image

    waiting for info 
    opened by Jeffrey-mu 8
  • Unused import error in generated controller

    Unused import error in generated controller

    I'm attempting to implement persistence. So I create a new folder models. Write a struct. Update the controllers to use that new struct instead of the autogenerated one. Then run bud run. But bud errors out with

    bud/.app/controller/controller.go:10:2: imported and not used: "github/donovanrost/bud-test/models"
    

    I don't think that bud needs to do any code generation with this package. Is there a way to tell bud to ignore it?

    bug 
    opened by donovanrost 8
  • Too many return values error on loadController()

    Too many return values error on loadController()

    Hi, Firstly this project looks great. Really looking forward to working with it.

    Getting the error...

    bud/.app/controller/controller.go:133:15: too many return values have (nil, error)

    Looks the loadController() is missing a return error definination

    func loadController() *controller.Controller { controllerController, err := controller.Load() if err != nil { return nil, err } return controllerController }

    bug 
    opened by joesamcoke 8
  • run error

    run error

    Hello, After I bud build the project, I remove the *.go and go.mod source files. run ./bud/app in the terminal, but it output the error: unable to find go.mod: file does not exist in "/Users/Works/news"

    ---- for exmaple input the command in the terminal news % ./bud/app unable to find go.mod: file does not exist in "/Users/Works/news"

    Why the app is running and it needs to depend go.mod?

    bug help wanted 
    opened by huqiuyun 8
  • ../../../go/pkg/mod/github.com/livebud/bud@v0.1.4/package/scaffold/template.go:28:8: undefined: any

    ../../../go/pkg/mod/github.com/livebud/[email protected]/package/scaffold/template.go:28:8: undefined: any

    ➜  bud-hello bud version
         bud: 0.1.4
      svelte: 3.47.0
       react: 18.0.0
    ➜  bud-hello bud run
    | Listening on http://127.0.0.1:3000
    # github.com/livebud/bud/package/scaffold
    ../../../go/pkg/mod/github.com/livebud/[email protected]/package/scaffold/template.go:28:8: undefined: any
    note: module requires Go 1.18
    ➜  bud-hello go version
    go version go1.17.10 darwin/amd64
    
    opened by forging2012 8
  • Can't create routes named `index`, `show`

    Can't create routes named `index`, `show`

    Reproduce

    1. Create a new project bud create project
    2. Create a root route (important) bud new controller anything:/ index show
    3. bud new controller index or bud new controller show (with or without views)
    4. bud run will give an error:
    | conjure: generate "bud/.app/main.go". conjure: generate "bud/.app/program/program.go". program: unable to wire. di: unable to wire "bud-app/bud/program".loadApp function. di: unable to find definition for param "bud-app/bud/.app/controller".*Controller in "bud-app/bud/.app/web".*Server . parser: unable to find declaration for "bud-app/bud/.app/controller".Controller in "bud/.app/web/web.go". bud/.app/controller/controller.go:15:2: Index redeclared in this block
    	previous declaration at bud/.app/controller/controller.go:13:2
    
    bug help wanted 
    opened by 012e 7
  • feature idea: detect git short version hash during build and embed into binary

    feature idea: detect git short version hash during build and embed into binary

    This PR addresses the first proposed solution to this issue. The second proposed solution is not implemented in this PR, but can be added with further information provided.

    opened by syke99 3
  • feature suggestion: `bud run` should launch browser (maybe with a flag to enable?)

    feature suggestion: `bud run` should launch browser (maybe with a flag to enable?)

    When launching the dev server, I have to manually open a browser tab and load the URL. It would be cool if it called out to the OS and simply told it to open the dev server URL. The quick and dirty (on macOS) is to shell out to open $URL but I imagine there's a go module somewhere that does this.

    Even a flag to do it would be fine, as I invoke bud run from a Makefile (make dev).

    c.f.: https://talk.jekyllrb.com/t/automatically-start-browser-on-localhost-4000-after-jekyll-serve/4916/5

    help wanted 
    opened by sneak 1
  • feature idea: detect git short version hash during build and embed into binary

    feature idea: detect git short version hash during build and embed into binary

    In my apps I usually do something like:

    var Version   string
    
    func main() {
    	os.Exit(httpserver.Run(Version))
    }
    

    Then at build time (in my Makefile) I do this:

    VERSION := $(shell git describe --always --dirty=-dirty)
    GOLDFLAGS += -X main.Version=$(VERSION)
    GOFLAGS := -ldflags "$(GOLDFLAGS)"
    

    This embeds the version string into the app so that I can access it, which is useful for me because then in production I can access this value and put it in my footers and error messages so that I know precisely which commit is running.

    It would be cool if bud build could detect if it's building out of a git repo, and embed the git shorthash into the built binary in this way. It seems that you could skip the ldflags part and simply "hardcode" the git shorthash into the main.go via the main.gotext template at build filesystem generation time.

    Anyway, just an idea, and I'm happy to take a crack at making a patch for this when I have some time, I just wanted to write it down while it's in my head.

    help wanted 
    opened by sneak 2
  • generated app directory fails linting with golangci-lint

    generated app directory fails linting with golangci-lint

    golangci-lint run --fix
    bud/internal/app/main.go:74:19: Error return value of `budClient.Publish` is not checked (errcheck)
    	budClient.Publish("app:ready", nil)
    

    As part of CI I run a linting of my repository. I suggest adding the line //nolint at the top of the template for bud/internal/app/main.go, as well as any other bud-managed template boilerplate files. This way any linters people use will ignore these files (without having to do special configuration to exclude the bud directory like is already automagically done in the .gitignore.)

    help wanted 
    opened by sneak 1
  • using 'change.me' placeholder in go.mod causes network connections to hostname 'change.me'

    using 'change.me' placeholder in go.mod causes network connections to hostname 'change.me'

    When using example/placeholder strings that are interpreted as domain names, the domain example.com should be used.

    https://github.com/livebud/bud/blob/d9c7ff63a929c9c308921ae35a929f19c5b101c9/internal/cli/create/create.go#L116

    needs decision 
    opened by sneak 3
Releases(v0.2.5)
  • v0.2.4(Sep 3, 2022)

    • Partial support for auto-incrementing the port if already in use (#250)
    • Fix staticcheck problems and integrate into CI (#263)
    • Add support for Go 1.19 (#262)
    • bud tool ... now support -C chdir support (#255)
    • Auto infer module when bud create outside $GOPATH (#242) (thanks @012e!)
    • Add console.error, console.warn, setTimeout, setInterval, clearTimeout and clearInterval to V8 (#233)
    Source code(tar.gz)
    Source code(zip)
    bud_v0.2.4_darwin_amd64.tar.gz(17.11 MB)
    bud_v0.2.4_darwin_arm64.tar.gz(16.20 MB)
    bud_v0.2.4_linux_amd64.tar.gz(17.10 MB)
    checksums.txt(290 bytes)
  • v0.2.3(Jul 23, 2022)

  • v0.2.2(Jul 22, 2022)

    • BREAKING: fix numerous protocol bugs between controllers and views (#203)

      This was mostly around nested views. A lot of this was undocumented and so we finally started testing behaviors. You may need to adjust what your views export if you were heavily relying on nested controllers / views

    • Add scaffolding support for remaining controller actions: create, update, delete, edit & new (#203)

      You can now call bud new controller posts create update delete edit new show index and scaffold all 7 controller actions.

    • Trigger full reloads on non-update events (#212)

      Now if you rename, delete or add Svelte views, the watcher will pickup on these changes and trigger a reload.

    • Add support for method overriding in <form> tags (#203)

      This allows you to submit PATCH, PUT and DELETE requests from forms using the _method parameter.

      <form method="post" action={`/${post.id || 0}`}>
        <input type="hidden" name="_method" value="patch">
        <!-- Add input fields here -->
        <input type="submit" value="Update Post" />
      </form>
      
    • Test that you can import Svelte files from node_modules (#221) thanks to @jfmario!

      This release tested that you can indeed install and use Svelte components from the community like svelte-time and Bud will pick them up.

    • Support controllers that are named Index and Show (#214) thanks to @jfmario!

      Prior to this release, you couldn't create a controller in controller/index/controller.go because it would conflict with the Index action. Now you can.

    • Escape props before hydrating (#200)

      This allows you to pass raw HTML that could include a <script> tag as props into a Svelte view and have the rendering escaped.

    Source code(tar.gz)
    Source code(zip)
    bud_v0.2.2_darwin_amd64.tar.gz(16.87 MB)
    bud_v0.2.2_darwin_arm64.tar.gz(16.01 MB)
    bud_v0.2.2_linux_amd64.tar.gz(16.88 MB)
    checksums.txt(290 bytes)
  • v0.2.1(Jul 4, 2022)

  • v0.2.0(Jul 2, 2022)

    • Improve support for injecting request-specific dependencies (#181)

      In v0.2.0, you can now create controller dependencies that have access to the request and response and are scoped to the request-response lifecycle.

      package controller
      
      // Flash is a session flash that could be in a separate package
      type Flash struct {
        Writer http.ResponseWriter
      }
      
      func (f *Flash) Set(msg string) {
        http.Cookie(f.Writer, &http.Cookie{
          Name: "flash",
          Value: msg,
        })
      }
      
      // Based on: https://www.alexedwards.net/blog/simple-flash-messages-in-golang
      func (f *Flash) Get() string {
        c, err := r.Cookie(name)
        if err != nil {
          return ""
        }
        http.SetCookie(f.Writer, &http.Cookie{
          Name: name,
          MaxAge: -1,
          Expires: time.Unix(1, 0),
        })
        return c.Value
      }
      
      type Controller struct {
        Flash *Flash
      }
      
      func (c *Controller) Create() (*User, error) {
        // ... create the user
        c.Flash.Set("Successfully created a user!")
        return user, nil
      }
      
      func (c *Controller) Show(id int) (*Page, error) {
        // ... load the user
        page := &Page{
          User: user,
          Flash: c.Flash.Get()
        }
        return page, nil
      }
      
      // Note: in the future, there will be a way to access the flash from views
      // without needing to pull it out and add it to your props.
      // See: https://github.com/livebud/bud/pull/185 for more details.
      type Page struct {
        User *User
        Flash string
      }
      

      It may seem like if you had a database client within the Session it will be re-initialize the database for every request. This is not the case.

      Dependency injection uses a technique called hoisting to avoid re-initiazation of dependencies that don't depend on the scoped parameters (in this case *http.Request and http.ResponseWriter).

    • Add rudimentary redirects on form submissions that have errors

      Prior to this release, form errors would return a JSON response even if you submitted from an HTML page.

      In this release, we now redirect back to the page that submitted the form. You don't yet have access to what failed. This will come in a future release.

    • Add bud tool bs for starting the local bud server

      This is helpful for hacking on your generated bud files without the generators clobbering your changes. See this section in the contributing guide for more details.

    • Use a more .gitignore compliant matcher.

      The previous matcher just used globbing, but .gitignore has a more sophisticated way of ignoring files. For example bud/ will ignore all inner files. This is something the previous matcher didn't understand.

      This fixes some watch looping due to an unexpected failure to match a .gitignore line item.

    Source code(tar.gz)
    Source code(zip)
    bud_v0.2.0_darwin_amd64.tar.gz(16.86 MB)
    bud_v0.2.0_darwin_arm64.tar.gz(16.00 MB)
    bud_v0.2.0_linux_amd64.tar.gz(16.86 MB)
    checksums.txt(290 bytes)
  • v0.1.10(Jun 28, 2022)

    • Fix regression when running bud create outside of a $GOPATH (#167)
    • Fix cache clear before code generation to ensure there's no stale generated code. Prior to v0.1.10, we were clearing part of the cache not all of it (#168)
    • Allow explicit versions to be installed with curl by setting the VERSION environment variable (#168)
    Source code(tar.gz)
    Source code(zip)
    bud_v0.1.10_darwin_amd64.tar.gz(16.88 MB)
    bud_v0.1.10_darwin_arm64.tar.gz(16.01 MB)
    bud_v0.1.10_linux_amd64.tar.gz(16.88 MB)
    checksums.txt(293 bytes)
  • v0.1.9(Jun 26, 2022)

    • Better hot reload DX with bud run (#131) thanks to @012e

      Prior to v0.1.9, whenever a file change occurs it would rebuild and print a ready message if successful or an error message if unsuccessful. The ready messages would often clutter the terminal over time.

    • Large internal refactor (#133). The goals of this refactor:

      1. Make it easier to understand. The double generated binary building was something that often confused me.
      2. Make it easier to contribute. I'm so impressed with the contributions so far, with this refactor it should be even easier.
      3. Make it faster during development. The slowest step in the build process is running go build. We now only run go build once on boot, not twice.

      Learn more details in this comment. This PR concludes the work necessary to release v0.2.

    • Support glob embeds (#150) thanks to @vito

      Build caching now understands embedded globs like // go:embed *.sql. You'll no longer get stale builds when changing a file within an embedded glob.

    • Improved Dockerfile in contributing (#140) thanks to @wheinze

      The Dockerfile now supports passing Node and Go versions to build a custom container. It also uses a smaller base image.

    Source code(tar.gz)
    Source code(zip)
    bud_v0.1.9_darwin_amd64.tar.gz(16.88 MB)
    bud_v0.1.9_darwin_arm64.tar.gz(16.01 MB)
    bud_v0.1.9_linux_amd64.tar.gz(16.88 MB)
    checksums.txt(290 bytes)
  • v0.1.8(Jun 22, 2022)

    • Support func(w, r) controller actions (#147) (thanks @vito!)

      This release adds a highly-requested feature (atleast by me!) where you can now drop down to using the vanilla http.HandlerFunc signature.

      This is a useful escape hatch for webhooks, streaming and other complex use cases.

      package webhooks
      
      type Controller struct {
        GH *github.Client
      }
      
      func (c *Controller) Index() string {
        return "GitHub webhook service!"
      }
      
      // Create handles incoming webhooks
      func (c *Controller) Create(w http.ResponseWriter, r *http.Request) {
        // Respond to the webhook using a vanilla HTTP handler function!
      }
      
    • Replace redirect with case-insensitive routing (#142) (thanks @vito!)

      Prior to v0.1.8, if you defined the route /bud, but a user visited /BUD, they would be redirected to /bud. This was originally done for SEO purposes to prevent different casing from appearing as separate pages.

      However, this had an unfortunate side-effect in that you couldn't use parameters with mixed casing (e.g. base64 encoding).

      In v0.1.8, we changed this so that URL routing is now case insensitive, so /BUD will run the /bud action. This doesn't address the SEO issue, but that will be a follow-up task for a later time.

    Source code(tar.gz)
    Source code(zip)
    bud_v0.1.8_darwin_amd64.tar.gz(15.09 MB)
    bud_v0.1.8_darwin_arm64.tar.gz(14.32 MB)
    bud_v0.1.8_linux_amd64.tar.gz(15.14 MB)
    checksums.txt(290 bytes)
  • v0.1.7(Jun 4, 2022)

  • v0.1.6(Jun 4, 2022)

    • Ensure alignment between CLI and runtime (#126)

      In v0.1.5, we had a breaking change in the runtime. If you had an existing project and upgraded the CLI to v0.1.5, but you were still using the v0.1.4 runtime in go.mod, you'd encounter an error. This change automatically updates your go.mod to align with the CLI that's building it. Fixes: #125.

    Source code(tar.gz)
    Source code(zip)
    bud_v0.1.6_darwin_amd64.tar.gz(15.09 MB)
    bud_v0.1.6_darwin_arm64.tar.gz(14.32 MB)
    bud_v0.1.6_linux_amd64.tar.gz(15.14 MB)
    checksums.txt(290 bytes)
  • v0.1.5(Jun 4, 2022)

    This release focuses on paying down some technical debt that was accumulated prior to the release. It's part of the v0.2 plan.

    • Rename bud run [--port=<address>] to bud run [--listen=<address>]

      This breaking change addresses the confusion discussed in https://github.com/livebud/bud/discussions/42.

    • Rename bud tool v8 client to bud tool v8 serve

      This breaking change gives a better name for what the command does, listen for eval requests, evaluate the javascript and return the response.

    • 204 No Content improvements (thanks @theEyeD!)

      Now when controller don't have a return value or return a nil error, they return 204 No Content. For example:

      package users
      type Controller struct {}
      func (c *Controller) Create() error {
        return nil
      }
      
      $ curl -X POST /users
      HTTP/1.1 204 No Content
      Content-Length: 0
      
    • Dedupe and group watch events (#123)

      This reduces the number of events the watcher triggers on Linux causing less builds to trigger at once. It also hopefully fixed an issue where "remove" events sometimes weren't triggering rebuilds on all platforms.

    • Improve CI (thanks @wheinze!) (#118)

      Waldemar took a much needed pass over the CI. He cleaned up the file, fixed caching and extended the test matrix, so we can more confidently say what's required to use Bud.

    • Refactor, test and simplify the compiler (#93)

      The compiler wasn't really tested prior to v0.1.4. Issue that would crop up would be discovered due to E2E tests. In v0.1.5, the compiler was refactored to be testable, then tested. It was also simplified to reduce the number of ways you could use it programmatically. This makes it less likely a test will pass but the end-to-end usage will fail.

    • Extend the error chain (#100)

      Errors were being lost while merging the filesystems for plugins. Now errors that occur in generators will be extended through the merged filesystem, so it's easier to see when there are issues in the generators

    Source code(tar.gz)
    Source code(zip)
    bud_v0.1.5_darwin_amd64.tar.gz(15.09 MB)
    bud_v0.1.5_darwin_arm64.tar.gz(14.32 MB)
    bud_v0.1.5_linux_amd64.tar.gz(15.14 MB)
    checksums.txt(290 bytes)
  • v0.1.4(May 19, 2022)

    • Add support for custom actions (thanks @theEyeD!)

      This release adds support for defining custom actions on controllers that get mapped to GET requests. This feature closes: https://github.com/livebud/bud/pull/67.

      For example, given the following users controller in controller/users/users.go:

      package users
      type Controller struct {}
      func (c *Controller) Deactivate() error { return nil }
      

      The Deactivate method would get mapped to GET /users/deactivate. Learn more in the documentation.

    • Speed up tests by using existing GOMODCACHE

      Some of the test suite used an empty GOMODCACHE to test plugin support. This turned added about a 1-minute overhead to those tests while dependencies were downloaded and the cache was populated.

      We now rely on real module fixtures: https://github.com/livebud/bud-test-plugin and https://github.com/livebud/bud-test-plugin.

    • Add a version number to released assets

      This will make it easier to add Bud to other package managers like the Arch User Repository (AUR) for Arch Linux users. This feature fixes: https://github.com/livebud/bud/issues/52.

    • Added a background section to the Readme (thanks @thepudds!)

      @thepudds re-wrote the Reddit post, simplifying and condensing it for the Readme. I always like when projects include a "why", so I really appreciate @thepudds adding this for Bud!

    Source code(tar.gz)
    Source code(zip)
    bud_v0.1.4_darwin_amd64.tar.gz(15.21 MB)
    bud_v0.1.4_darwin_arm64.tar.gz(14.43 MB)
    bud_v0.1.4_linux_amd64.tar.gz(15.25 MB)
    checksums.txt(290 bytes)
  • v0.1.3(May 16, 2022)

  • v0.1.1(May 15, 2022)

    • Improve the installation script https://github.com/livebud/bud/pull/34 (thanks @barelyhuman!)

      For cases where /usr/local/bin is not writable, the install script will now prompt you to escalate your privileges.

    • Run Go's formatter on generated template files https://github.com/livebud/bud/pull/28 (thanks @codenoid!)

      Now the Go files generated into bud/ will be formatted with the same formatter as go fmt.

    • Fix bud create when working outside of $GOPATH https://github.com/livebud/bud/pull/31 (thanks @barelyhuman!)

      If you tried created a Bud project outside of $GOPATH, Bud would be unable to infer the Go module path and will prompt you to provide a module path. This prompt was being clobbered by NPM's progress bar. Now the prompt happens before running npm install.

    • Add a Contributor's Guide

      Wrote an initial guide on how to contribute to Bud. Please have a look and let me know if you'd like to see anything else in that guide.

    • Switch the default from 0.0.0.0 to 127.0.0.1 (#35)

      On the latest OSX you'll get a security prompt when you try binding to 0.0.0.0. On WSL, bud will just stall. This release switches the default to localhost (aka 127.0.0.1). Many thanks to @alecthomas, @theEyeD and @kevwan for helping me understand this issue better.

    Source code(tar.gz)
    Source code(zip)
    bud_darwin_amd64.tar.gz(15.27 MB)
    bud_darwin_arm64.tar.gz(14.48 MB)
    bud_linux_amd64.tar.gz(15.31 MB)
    checksums.txt(269 bytes)
  • v0.1.0(May 14, 2022)

  • v0.0.9(May 2, 2022)

  • v0.0.8(May 2, 2022)

  • v0.0.7(Apr 29, 2022)

  • v0.0.6(Apr 29, 2022)

  • v0.0.5(Apr 28, 2022)

  • v0.0.4(Apr 28, 2022)

    • Fix bud run after installing from Github

      When you build the binaries with --trimpath, it removes the import paths stored within the binary. This is preferable because you don't want to see my filepaths within the binary, but it also means that the downloaded binary was no longer able to find where the standard library packages were located. I fixed this by calling go env on boot. This adds about 7ms overhead on boot, so I'd like to find a way to do this without spawning, but we'll leave that as an exercise for the reader :)

      Another problem we encountered was that the runtime was missing some of the necessary embedded assets. I've removed them from .gitignore to fix the problem. Longer-term I think it makes sense to use bindata for this case to turn them into Go files that can be ignored in development but are built into the binary for production.

    • Add back missing node_modules

      I overpruned the dependencies and that was causing failures in CI. I added them back in.

    Source code(tar.gz)
    Source code(zip)
    bud_darwin_amd64.tar.gz(15.26 MB)
    bud_linux_amd64.tar.gz(15.29 MB)
    checksums.txt(179 bytes)
  • v0.0.3(Apr 28, 2022)

    • Bud is finally open source on Github!

      I'm thrilled to finally share my side project with everyone! I first started working on this while in lockdown in Berlin on April 20th, 2019. A co-worker suggested I have a look at the Laracast videos about Laravel. I was just blown away by how productive you can be in Laravel.

      As a former solo developer, I place a lot of weight on having all the tools you need to build, launch and iterate on ideas as quickly as possible. Laravel provides a comprehensive and cohesive toolset for getting your ideas out there quickly.

      With Go being my preferred language of choice these days and a natural fit for building web backends, I started prototyping what a Laravel-like MVC framework would look like in Go.

      At this point, I just had the following goal for Bud:

      • Be just as productive as Laravel in a typed language like Go.

      I got the first version working about 6 months in and I tried building a blog from it. It fell flat. You needed to scaffold all these files just to get started. If you're coming from Rails or Laravel you may shrug, this is pretty normal. Unfortunately, I've been spoiled by the renaissance in frontend frameworks with Next.js. What I love Next is that it starts out barebones and every file you add incrementally enhances your web application. This keeps the complexity under control.

      With these newly discovered constraints, I started working on the next iteration of Bud.

      • Generate files only as you need them. Keep these generated files away from your application code.
      • Should feel like using a modern Javascript framework. This means it should work with modern frontend frameworks like Svelte and React, support live reload and have server-side rendering.

      With these new goals, the Bud you see today started to take shape. But along the way, I discovered a few more project goals:

      • The framework should be extensible from Day 1. Bud is too ambitious for one person. We're going to need an ambitious community behind this framework.
      • Bud should have great performance for the developer using Bud and for the person using websites built with Bud. We have an exciting journey ahead for both of these goals.
      • Bud should compile to a single binary. These days with platforms services like Heroku and Vercel, it's easy to not care about this, but I still cherish the idea that I can build a single binary that contains my entire web app and scp it up to tiny server.

      And this is the Bud you see before you. I have big plans for the framework and I sincerely hope you'll join me on this journey.

    Source code(tar.gz)
    Source code(zip)
    bud_darwin_amd64.tar.gz(15.26 MB)
    bud_linux_amd64.tar.gz(15.29 MB)
    checksums.txt(179 bytes)
  • v0.0.2(Apr 27, 2022)

    Improve test caching

    The tests are slower than they should be. What was curious was that they didn't seem to be doing much during a lot of the test run.

    I dug into why and it turns out the test caching itself can be extremely slow. See this issue for more details: https://github.com/golang/go/issues/26562. It's slated to be fixed in Go 1.19, so I'm going to hold off on a fix for that.

    Additionally, the tests weren't ever being cached. If you'd like to read about the whole debugging saga that took a day to figure out, head over to this issue: https://github.com/golang/go/issues/26562. I've remedied this issue, but it's something to keep an eye on.

    Prep the build script

    I'm in the process of setting up curl -sf https://github.com/livebud/bud/install.sh | sh. In doing that, I'm ironing out the publishing pipeline and install script.

    Source code(tar.gz)
    Source code(zip)
    bud_darwin_amd64.tar.gz(15.25 MB)
    bud_linux_amd64.tar.gz(15.29 MB)
    checksums.txt(179 bytes)
Owner
Live Bud
Live Bud
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
We are creating a Library that would ensure developers do not reinvent the wheel anymore as far as Authentication is concerned. Developers can easily register and download authentication codes that suits their need at any point.

#AuthWiki Resource Product Documentation Figma Database Schema First Presentation Live Link API Documentation Individual Contributions User Activity U

Zuri Training 17 Dec 2, 2022
Repositório com código da segunda live do Santander Coders Web FullStack

CASE WEB APP DE PREVISÃO DO TEMPO Node.js Como iniciar projeto React de maneira simples: Create React App (CRA): npx create-react-app nome_do_app Vite

Let's Code 29 Apr 3, 2022
Projeto Final - Web FullStack do curso Resilia

Amassa API As dependências utilizadas no projeto foram: ?? Iniciando o projeto Recomendamos que faça o download do Insomnia na sua maquina! download i

Matheus Germano 3 May 6, 2022
Projeto de conclusão de módulo - Bootcamp Resilia Web FullStack

projeto_Modulo5_Imobiliaria_Frontend_ReactJS Projeto Final do módulo 5, Resilia Web Full Stack. ?? Descrição O objetivo deste projeto é aprender a est

Emanuel Melo 4 Jan 21, 2022
Primeiro projeto do Módulo 1 da Blue ed Tech - Web Fullstack

Projeto1-Modulo1-BlueFullstack Módulo 1 - Blue ed Tech - Web Fullstack Projeto 1 - A Jornada do Herói A premissa é a seguinte: O nosso herói chegou ao

Vinhas93 2 Mar 9, 2022
💡 A FullStack Quiz web app using TypeScript and Next.js!

A FullStack Quiz app using TypeScript and Next.js! This projects is in portuguese! Self Hosting npm i && npm run build && npm run start # or yarn && y

Jon4s_ 6 Aug 13, 2022
A minimal, modern, generic, hot-reloading local web server to help web developers

eleventy-dev-server ?? ⚡️ ?? ?? A minimal, modern, generic, hot-reloading local web server to help web developers. ➡ Documentation Please star Elevent

Eleventy 52 Dec 31, 2022
Projeto desenvolvido para o curso de desenvolvimento fullstack da escola de programação Driven.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Caio Lemos 3 Nov 11, 2022
Projeto desenvolvido para o curso de desenvolvimento fullstack da escola de programação Driven.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Caio Lemos 4 Nov 11, 2022
Fullstack Turborepo starter. Typescript, Nestjs, Nextjs, Tailwind, Prisma, Github Actions, Docker, And Reverse proxy configured

Turborepo (NestJS + Prisma + NextJS + Tailwind + Typescript + Jest) Starter This is fullstack turborepo starter. It comes with the following features.

Ejaz Ahmed 132 Jan 9, 2023
Project developed as Capstone of Q4 Backend module of the Fullstack Developer Course of Kenzie Academy Brasil by the group @ezms, @Nafly09, @RafaelSchug, @victorlscherer, @Vinicius2m, @ManoelaCunha

✨ Quokka Services ✨ ?? Serviço rápido e sem preocupação! ?? O objetivo da nossa aplicação é diminuir a dificuldade que moradores de condomínios encont

Manoela Fernanda Girello Cunha 4 May 4, 2022
Fullstack Dynamic NFT Mini Game built using 💎 Diamond Standard [EIP 2535] 🏃‍♀️Players can use Hero NFT to battle against Thanos ⚔ Heroes can be Healed by staking their NFT 🛡

?? Fullstack Dynamic NFT Mini Game ?? ?? Using Diamond Standard Play On ?? ?? ⏩ http://diamond-dapp.vercel.app/ Project Description ?? Fullstack Dynam

Shiva Shanmuganathan 21 Dec 23, 2022
Fullstack Spotify clone app using NextJS and many other libraries.

Spotify Clone Spotify clone made with NextJS on both the client and server sides. For the database, I utilized Postgresql and Prisma ORM. I used Chakr

Mithat Ercan 6 Dec 7, 2022
Introductory fullstack ethereum dapp using: solidity, hardhat, react.js, ethers.js

Intro to Fullstack Ethereum Development Check out deployed dapp here! (Make sure you're connected to the Rinkeby Testnet) This article will help you e

Christian Chiarulli 77 Dec 21, 2022
A Fullstack Food Ordering App which created with NextJS.

A Fullstack Food Ordering App which created with NextJS. Click demo to try it by yourself! Food Ordering App Demo Link You can view the site here Clic

Özge Coşkun Gürsucu 7 Aug 17, 2022
A fullstack TikTok clone with Nextjs, Prisma, trpc

TikTok Clone A fullstack TikTok clone with Nextjs, Prisma, trpc Live demo Official website: https://toptop-clone.vercel.app/ Main technology used The

Phong Nguyen 115 Dec 19, 2022