Dart is crazy because it runs on every platform, compiles to native, has real parallelism via isolates, native async, and native type safety.
There's not really a backend that takes advantage of all that. In theory, one server binary could handle REST, web sockets, background workers, and have generated type safe client packages for every platform. Dart also has a great Rust ffi story. It would be great to see that leveraged.
ServerPod is a great start, but it's really Flutter focused. The web apis feel like second class.
Additionally, database management isn't a solved problem yet. ServerPod uses yaml to define models, and the other main option is just a Prisma wrapper. Dart needs something like Drizzle.
You could state the same thing as your first sentence for e.g. Rust or many other languages, I personally only see Dart being useful if you already have a Flutter app and you don't want to learn another language, and to have shared types easily, similar to fullstack web devs using TypeScript for their React and Node apps.
I personally use Rust backends and Flutter frontends for my apps. I'd use pure Rust for the entire thing but Rust frontends are nowhere near the capabilities and maturity as Flutter, but I use FFI like flutter_rust_bridge and rinf at least, as you mention.
I actually can't think of another language that has all of that built in. Rust doesn't, it needs a run time for async. JavaScript doesn't, it needs typescript and it doesn't compile to native.
That's true about Rust but that's a feature not a bug as you can swap out async runtime if needed and if you do add it, it is still as or more efficient than Dart.
Kotlin Native is a toy for JetBrains to eat some of that Apple pie and capture teams that want to share logic between their mobile codebases.
Kotlin Native has no std, they cut down platform support with K2, performance and compilation speed are atrocious and there are no plans to improve any of that short term.
Kotlin without JVM can’t hold a candle to Dart. Which is a real shame for Dart, because Dart has improved dramatically last couple years while Kotlin has not introduced anything major last 5 years since release of coroutines.
Their K2 compiler, that was supposed to promise major compilation speed improvements, was mostly a flop and we are yet to see if they’ll do anything good with it. Context receivers are not even close, pattern matching is not even on a roadmap and they’re refusing to consider union types. Kotlin lives on a borrowed time.
1. runs on every platform (KNative runs natively on Linux, Mac, Windows, Android, iOS. It can also run under the JVM non-natively, and anywhere Javascript runs non-natively. The native code can build for a variety of architectures including ARM and x86)
2. compiles to native (As above, compiles to native on Linux/Mac/Windows/Android/iOS)
3. has real parallelism via isolates (Kotlin can spawn and interact with full processes, OS threads, and/or green threads in any admixture)
4. native async (Kotlin has native async/await support via coroutines, which work under KNative)
5. native type safety (Kotlin has a strong static type system which is available for native code as well and encompasses native types interactive with Kotlin code in either direction)
I don't think anything you said pertains to the listed five features. Especially complaining about compile speed is a strange thing to be doing in the context of this conversation.
On the topic of databases, I think https://drift.simonbinder.eu/ might interest you. I've been using it in a Flutter app with SQLite, but my understanding is that you could use it on the server too. I recall them having support for at least SQLite and Postgres.
This is very cool! Somewhat similar, I recently bought a Nintendo Switch version of Ticket to Ride, which supports using a "companion app" on other devices to show each player their private hand.
However, one unfortunate bit is that the board (in my case, the TV connected to the Switch) is "read-only" and you don't interact with it, unlike real life. You pick which card to play on your phone, and then place it onto the board also on your phone. So basically, all the action is on your phone, and the central board is kind of an afterthought. It doesn't feel as much like interacting with a shared space as I was hoping.
I'm not really sure how to solve that. I thought of some weird stuff (like, maybe after you pick your card, your phone is just a touchpad controlling the card as it now moves around on the big screen) but nothing seemed practical.
An obvious answer is to play the physical game, but I also wonder if people are starting to adapt to virtual tabletop games? Virtual tangible? How intriguing!
In this specific case, I bought it during a long overseas trip and our physical games were back at home!
That said, while I love physical games, some digital aspects seemed potentially appealing: automatic scoring, rules enforcement to prevent mistakes, not taking up space, ability to try new ones out easily, etc.
I've been playing a city builder game in mixed reality called Spacefolk City recently, and having experienced moving around little interactive pieces in that context, I think they only reason this isn't common is because having mixed reality devices on hand isn't common. Feels totally natural, way better than a shared TV or something: better a board game, but honestly for MANY games they would be better in a mixed reality setup where the computer can do all the calculations and setup for you. Many great games just have too much setup time.
Sounds interesting, I'll have to look into that. I'll say that the shared TV was better in one respect: it was right-side-up for more than just one person!
Ticket to ride isn’t so bad, but a number of the more in depth board games have a LOT of setup. Digital versions can eliminate hours of tedium across multiple sessions. I have the physical copy of Gloomhaven that was only played once. I played the digital version with my son for tens of hours.
Adobe was trying to figure out how to position Flash in the aftermath of the iPhone. I will forever remember one of their concepts was using a variety of devices to share one experience, like your example of a board game that uses different devices for common and private elements.
20y later, it's disappointing that this is still a novelty. I think Nintendo had a tank game for the Switch, but I never got to try it because everyone needed his own copy and a Switch. Jackbox are the only ones I've seen ship something people actually play this way.
Adaptive design still hasn't been capitalized on as well as it ought to be. Everything is so optimized for metrics and commerce, and good design often gets lost in the fray.
Incidentally it's also one of the few times I've seen a dart/flutter project on the front page of HN, and even had some non-critical comments, so again well done.
When VR was starting to gain attraction, I had this idea of a virtual playing card deck. Everybody joining the game could move the phone around to see the virtual cards either on their hand or on the surface chosen as the "table". The idea came from the need to play cards in the hall of college department without showing that we were playing cards.Unfortunately, my college education did not equip me enough skills to make that happen. I'm glad that somebody else made this. Looks very nice!
There was an old android app called "Flick Hearts" (2011) that had the same concept of a center table (tablet) and individuals playing on their phones. I always thought it was pretty imaginative for the time, haven't really seen it since.
I thought this was an incredible well executed/engineered art/commentary on using an incredible amount of technology to create a similar....likely sub par experience to getting a deck of cards for <10 dollars
I got really excited to play a custom card game with my friends who are spread across the world. Was looking to see how I can add my own game, but when I downloaded the app to try out some sample games, I see that all the players have to be connected to the same WiFi. Does this mean the app is only for games played in person but on phone?
Not sure if the author is on this post but how was it like working with Flutter? Does this project run on web and desktop as well as mobile. Also, I'd look into replacing fvm with puro or mise instead, both are much faster.
Very awesome project, can't wait to get a chance to try it out.
I feel like you would benefit from having a real-life photo of "The deck" feature. Your description does it justice, but your graphic does not. (To me)
Ah I thought this was about computer games. For a second I thought that it was an engine to build arbitrary cross-platform card games with solid online multiplayer. But this seems rather specific, and cross-platform only means "Android/iOS" which is a stretch since they both run on the same kind of devices.
Same. I feel like it's almost a rite of passage of anyone who has built sideproject card games/hex games t think about building their own little engine (especially after spending time on red blob game's tutorials).
This looks really cool. A while ago I was thinking of putting together something similar but for very different reasons but this would enable bringing them to life much more easily.
Have you published as yet, how to create a new game on this?
Not to hijack the thread but, I'm building a personal monitor mixer (AoIP in, headphone out) with the control plane written entirely in Swift and the UI in Flutter. It works very nicely and we get an iOS/Android remote for free.
How in the world is this "not hijacking the thread" when your thing is not even related to shared gaming experiences, and almost certainly is not cross platform? Did you chime in just because you wrote something in Flutter?
To carry this further, were you hoping that some DJ who likes playing card games would stumble upon this post and pivot onto your thing?
If you're proud of it, submit it as its own Show HN
It's disappointing that Steam doesn't have a free publishing option for open source apps. The $100 publishing fee can be enough to relegate a game to GitHub rather than Steam, and I'd much rather install from Steam than figure out how to use an AppImage or whatever got posted to a GitHub Releases page.
There's enough weird anime porn garbage on Steam that I think they can handle a few hundred/thousand open source games of varying quality.
this is getting a lot of hate here, surprisingly: people saying this is antisocial or you should just go to the store and buy a deck of cards, etc...
about 10 years ago my wife and I wanted to make a card game something like a twist on cards against humanity or madlibs, that could be played in person or remotely. I built a back-end and protocol for organizing and conveying cards and such, and she got all the content put into the backend, and my buddy started on a mobile front end. my vision was to build it very abstractly, like a card game framework, so it could be any card game (and users could even make their own games). one mode was to use a tablet as the deck on the table and then everyone can hold their hand on their phones.
unfortunately, life got in the way, priorities changed, and we never finished it.
I had this idea that we could sell/license packs of card content by actual physical card game publishers... phase 10, uno, CAH, etc...
don't let the jerks here get you down, I for one appreciate this project (in spirit, haven't looked at the code) and might try to use it to finish our game one day.
I think its an awesome showcase project, no doubt - I starred it and bookmarked it, probably like so many others.
However, I would never use it as a game. Ever.
One of my primary objectives playing card games with a group of people in a local setting is the social aspect. It means: no phones. I find it utterly asocial to sit there in a group of people all with their phones in their hand staring at the phone, then at some point getting distracted with doom scrolling instagram. Its so disturbing. Maybe I am old (40), I don't doubt that. Maybe I reach that point where I simply "don't get it" anymore. But I stand by it. It's not for me. Maybe I am alone, but I doubt that.
Let's talk card games then, because a lot of the card games are strategy.
It's how you interact with the cards.
You are not staring in your cards. Maybe you are sorting the cards. You are observing what other people are doing with their cards. Sometimes you are just glancing at cards and putting them back on the table (e.g. poker).
Everything vanishes with a phone doing that for you. It takes away the magic of card games for me.
Again, I am strictly speaking of myself, but if I go with a group of people to play cards and then they pull out their phones, I'll simply leave the table and go home or do something else.
Physical cards also allow you to practice shuffling and card handling in general improving dexterity.
Electronic cards would allow you to play more widely (presumably we all don’t walk around with a deck in our pockets). But I don’t often get into spontaneous card games. They are usually planned and at a location with easy access to decks.
There are games made specifically for the phone I could imagine to pull out in a group of people, but its not card games. It's games which specifically benefit from a multi-touch device like a phone or the graphics or the gyro or other sensors. Games you cannot play without a phone. Would also be weird to play counter strike without a computer.
Especially card games are offline games for me. They're (my personal) go-to tech detox social thing and doing that with phones is simply weird for me. That's maybe why I felt so strong to make this point.
Again, awesome project. Maybe its for some, but not for me.
I was long thinking if I should comment on this or not...
First of all, I feel bad that my comment before apparently conveyed the wrong message: The project is well executed, code wise. It was (most likely?) a ton of work and I did not mean to comment anything negative towards the project at all.
Second, if anything in that project would have hinted even a tiny inch towards more inclusivity in card games, I would probably never had said anything. But it doesn't.
The project markets itself as solving a problem I never heard of anyone ever had ("a situation many of us have experienced") and therefore does not resonate with me or most likely anyone I ever played cards with in all-nighters. Instead, it would've been a buzzkill to play on the phone. But ok, I (or anyone I played with) might not be the target group. As I said, it was my personal opinion and that's what I expressed.
but then ... "if you have nothing nice to say don't say anything at all" ... because?
Shutting my mouth there would basically equal to a lie. I am not a liar and I am not becoming one just because my criticism is making anyone uncomfortable.
I am that kind of person who is telling people if they have spinach between their teeth, I tell people if they sat accidentally on a chewing gum and I definitely tell people if I think they are solving a non-existent problem (or their marketing message is not on par). Last time I checked, that is what this platform is for. If criticism makes people uncomfortable, great. Uncomfortable is where the comfort zone ends.
Mind you, at no point I got rude or personal or unreasonable, I hope. I stated its my opinion. My personal one. Based on my experience. And at no point I mentioned the code was bad, or at any point I was downtalking the devs, insulting or otherwise. Instead I respect their work to the utmost level. But I simply do not understand the problem they solve, instead it goes against what I experienced in my life. And on this platform I sure hope this is something that is not only allowed, but very welcome.
This is a good point. We are easily distracted, especially when waiting for people to take their turn. The device based distractions can be stopped by using Guided Access. It can temporarily lock a device to one app, and block notifications from popping up.
I was more thinking about the name. You are free to clone game mechanics and use different assets, but you can't say "play Dixit" unless you actually have permission to use that name.
The inspiration for “The Deck” came from a situation many of us have experienced. Imagine gathering with friends for a game night, only to realize that nobody has the necessary cards. Frustrating, right? This dilemma sparked the idea of leveraging technology to create a solution.
This feels like a lot of work compared to popping down to the corner store for a pack of cards.
Leaving aside the efficency of the solution, I find it hard to believe that the problem is all that frequent. Yes, there are people who don't keep around decks of cards or other basic game components. But do those people organize game nights?
Seriously, I feel like if you say "hi I am Having A Game Night" then this kinda implies that you're gonna bring along some games to wherever you're getting your friends to gather, maybe they'll bring some too.
This project maybe gains potential when the number of games it can play far exceeds the number you can bring physically to a game night, especially if predicting which games people will want to play is difficult with that group or at that time.
A feature to allow users to create their own game rules for playing and sharing would be a great addition, IMO.
Neither of these points changes the mind of anyone who would rather play with the physical board game, but I think the ideal market for this is probably not that group.
Really? It looks like everyone just opens the app, one person hosts, and everyone scans their phone. Done. Works over wifi. No "searching" for the hosted server.
20 seconds vs. 30 minutes to drive to the store and back.
I wish the Dart server ecosystem was more mature though. Being able to compile Dart into a static binary is so nice for deployment.
I stopped using it because I needed to make money and my work was with nodejs.
There's not really a backend that takes advantage of all that. In theory, one server binary could handle REST, web sockets, background workers, and have generated type safe client packages for every platform. Dart also has a great Rust ffi story. It would be great to see that leveraged.
ServerPod is a great start, but it's really Flutter focused. The web apis feel like second class.
Additionally, database management isn't a solved problem yet. ServerPod uses yaml to define models, and the other main option is just a Prisma wrapper. Dart needs something like Drizzle.
I personally use Rust backends and Flutter frontends for my apps. I'd use pure Rust for the entire thing but Rust frontends are nowhere near the capabilities and maturity as Flutter, but I use FFI like flutter_rust_bridge and rinf at least, as you mention.
Kotlin Native is a toy for JetBrains to eat some of that Apple pie and capture teams that want to share logic between their mobile codebases.
Kotlin Native has no std, they cut down platform support with K2, performance and compilation speed are atrocious and there are no plans to improve any of that short term.
Kotlin without JVM can’t hold a candle to Dart. Which is a real shame for Dart, because Dart has improved dramatically last couple years while Kotlin has not introduced anything major last 5 years since release of coroutines.
Their K2 compiler, that was supposed to promise major compilation speed improvements, was mostly a flop and we are yet to see if they’ll do anything good with it. Context receivers are not even close, pattern matching is not even on a roadmap and they’re refusing to consider union types. Kotlin lives on a borrowed time.
1. runs on every platform (KNative runs natively on Linux, Mac, Windows, Android, iOS. It can also run under the JVM non-natively, and anywhere Javascript runs non-natively. The native code can build for a variety of architectures including ARM and x86)
2. compiles to native (As above, compiles to native on Linux/Mac/Windows/Android/iOS)
3. has real parallelism via isolates (Kotlin can spawn and interact with full processes, OS threads, and/or green threads in any admixture)
4. native async (Kotlin has native async/await support via coroutines, which work under KNative)
5. native type safety (Kotlin has a strong static type system which is available for native code as well and encompasses native types interactive with Kotlin code in either direction)
I don't think anything you said pertains to the listed five features. Especially complaining about compile speed is a strange thing to be doing in the context of this conversation.
Considering that both are made by Google, I can imagine that they just use Go for everything servers.
However, one unfortunate bit is that the board (in my case, the TV connected to the Switch) is "read-only" and you don't interact with it, unlike real life. You pick which card to play on your phone, and then place it onto the board also on your phone. So basically, all the action is on your phone, and the central board is kind of an afterthought. It doesn't feel as much like interacting with a shared space as I was hoping.
I'm not really sure how to solve that. I thought of some weird stuff (like, maybe after you pick your card, your phone is just a touchpad controlling the card as it now moves around on the big screen) but nothing seemed practical.
That said, while I love physical games, some digital aspects seemed potentially appealing: automatic scoring, rules enforcement to prevent mistakes, not taking up space, ability to try new ones out easily, etc.
20y later, it's disappointing that this is still a novelty. I think Nintendo had a tank game for the Switch, but I never got to try it because everyone needed his own copy and a Switch. Jackbox are the only ones I've seen ship something people actually play this way.
Adaptive design still hasn't been capitalized on as well as it ought to be. Everything is so optimized for metrics and commerce, and good design often gets lost in the fray.
Incidentally it's also one of the few times I've seen a dart/flutter project on the front page of HN, and even had some non-critical comments, so again well done.
More details on the implementation are here (same content)
https://dev.to/ilbets/game-night-just-got-a-digital-upgrade-...
https://medium.com/@igorsteblii/game-night-just-got-a-digita...
I love it!
Source: https://github.com/ArnoldSmith86/virtualtabletop
I remember back in the day I used to use Hamachi to play Xbox LAN with my friends in different universities.
I feel like you would benefit from having a real-life photo of "The deck" feature. Your description does it justice, but your graphic does not. (To me)
[0]: https://getthedeck.com
I agree that `engine` is a strong word - still early days :)
Have you published as yet, how to create a new game on this?
https://forums.swift.org/t/an-embedded-audio-product-built-w...
To carry this further, were you hoping that some DJ who likes playing card games would stumble upon this post and pivot onto your thing?
If you're proud of it, submit it as its own Show HN
Hope to finish the new version soon
There's enough weird anime porn garbage on Steam that I think they can handle a few hundred/thousand open source games of varying quality.
about 10 years ago my wife and I wanted to make a card game something like a twist on cards against humanity or madlibs, that could be played in person or remotely. I built a back-end and protocol for organizing and conveying cards and such, and she got all the content put into the backend, and my buddy started on a mobile front end. my vision was to build it very abstractly, like a card game framework, so it could be any card game (and users could even make their own games). one mode was to use a tablet as the deck on the table and then everyone can hold their hand on their phones.
unfortunately, life got in the way, priorities changed, and we never finished it.
I had this idea that we could sell/license packs of card content by actual physical card game publishers... phase 10, uno, CAH, etc...
don't let the jerks here get you down, I for one appreciate this project (in spirit, haven't looked at the code) and might try to use it to finish our game one day.
thank you for sharing!
It has some very mild conceptual criticism from two top level comments.
However, I would never use it as a game. Ever.
One of my primary objectives playing card games with a group of people in a local setting is the social aspect. It means: no phones. I find it utterly asocial to sit there in a group of people all with their phones in their hand staring at the phone, then at some point getting distracted with doom scrolling instagram. Its so disturbing. Maybe I am old (40), I don't doubt that. Maybe I reach that point where I simply "don't get it" anymore. But I stand by it. It's not for me. Maybe I am alone, but I doubt that.
In this case, your cards are digital. Presumably you can choose some people who just want to play cards, not doomscroll instagram.
It's how you interact with the cards.
You are not staring in your cards. Maybe you are sorting the cards. You are observing what other people are doing with their cards. Sometimes you are just glancing at cards and putting them back on the table (e.g. poker).
Everything vanishes with a phone doing that for you. It takes away the magic of card games for me.
Again, I am strictly speaking of myself, but if I go with a group of people to play cards and then they pull out their phones, I'll simply leave the table and go home or do something else.
Electronic cards would allow you to play more widely (presumably we all don’t walk around with a deck in our pockets). But I don’t often get into spontaneous card games. They are usually planned and at a location with easy access to decks.
Especially card games are offline games for me. They're (my personal) go-to tech detox social thing and doing that with phones is simply weird for me. That's maybe why I felt so strong to make this point.
Again, awesome project. Maybe its for some, but not for me.
too much negativity in this thread!
if you have nothing nice to say just don't say anything at all.
First of all, I feel bad that my comment before apparently conveyed the wrong message: The project is well executed, code wise. It was (most likely?) a ton of work and I did not mean to comment anything negative towards the project at all.
Second, if anything in that project would have hinted even a tiny inch towards more inclusivity in card games, I would probably never had said anything. But it doesn't.
The project markets itself as solving a problem I never heard of anyone ever had ("a situation many of us have experienced") and therefore does not resonate with me or most likely anyone I ever played cards with in all-nighters. Instead, it would've been a buzzkill to play on the phone. But ok, I (or anyone I played with) might not be the target group. As I said, it was my personal opinion and that's what I expressed.
but then ... "if you have nothing nice to say don't say anything at all" ... because?
Shutting my mouth there would basically equal to a lie. I am not a liar and I am not becoming one just because my criticism is making anyone uncomfortable.
I am that kind of person who is telling people if they have spinach between their teeth, I tell people if they sat accidentally on a chewing gum and I definitely tell people if I think they are solving a non-existent problem (or their marketing message is not on par). Last time I checked, that is what this platform is for. If criticism makes people uncomfortable, great. Uncomfortable is where the comfort zone ends.
Mind you, at no point I got rude or personal or unreasonable, I hope. I stated its my opinion. My personal one. Based on my experience. And at no point I mentioned the code was bad, or at any point I was downtalking the devs, insulting or otherwise. Instead I respect their work to the utmost level. But I simply do not understand the problem they solve, instead it goes against what I experienced in my life. And on this platform I sure hope this is something that is not only allowed, but very welcome.
I would guess the assets[1] would be more legally problematic versus the game mechanics, which AIUI are only subject to patent claims, not copyright
1: https://github.com/xajik/thedeck/blob/86c2219d7c2aba47edd616...
This feels like a lot of work compared to popping down to the corner store for a pack of cards.
With apps players may get this functionality right out of the box.
A feature to allow users to create their own game rules for playing and sharing would be a great addition, IMO.
Neither of these points changes the mind of anyone who would rather play with the physical board game, but I think the ideal market for this is probably not that group.
20 seconds vs. 30 minutes to drive to the store and back.
This feels like a "neat, but why" project. Odds are the app is going to be difficult to use compared to a real deck.