[{"data":1,"prerenderedAt":454},["ShallowReactive",2],{"project-25059296":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":46,"post_text":49,"what":50,"said":81,"maker_in_thread":188,"shape":199,"grid":203,"attempts":417,"same_week":418,"maker_shows":41,"maker_hidden":446,"reader_version":447,"card":448},"25059296","Config.ly","Never hardcode your data again","title","Show HN: Config.ly – Never hardcode your data again","https:\u002F\u002Fwww.config.ly","config.ly","jeremyis",1605109676,2020,106,87,615,3028,21,"notable","dev_tools","configuration management","web_app",[24,25,21,26],"remote config","feature flags","config server","debated",-0.026,{"positive":30,"neutral":31,"mixed":32,"critical":33},9,13,2,10,34,{"idea":36,"privacy":39,"design":42,"performance":43,"pricing":44,"docs":45},{"positive":37,"critical":38},4,7,{"positive":40,"critical":41},0,1,{"positive":37,"critical":40},{"positive":40,"critical":41},{"positive":41,"critical":41},{"positive":40,"critical":40},[41,40,47,40,40,40,40,41,48,48,48,41,40,48,47,41,47,47,47,41,40,40,41,47,48,47,47,47,40,41,40,48,41,47,47,48,47,48,41,47],3,5,null,{"problem":51,"audience":58,"pricing":65,"motivation":72,"time_to_build":49,"stack":77,"openness":78,"stage":79,"team_size":80},{"value":52,"source":53,"evidence":54},"Hardcoded values require code deploys to change, which can be slow (e.g. app store approval)","maker",[55],{"id":56,"by":11,"text":57},"25059299","I’m Jeremy, cofounder of Config.ly. It’s like a CMS for your static variables \u002F copy \u002F constants so you can easily update them from a web UI instead of deploying code. We’re…",{"value":59,"source":53,"evidence":60},"Software engineers and non-technical teammates who update copy or constants",[61,62],{"id":56,"by":11,"text":57},{"id":63,"by":11,"text":64},"25060808","Hey thanks for the insightful comment! I'm sympathetic to your thought here on having an external service and going with a simple approach. Situations with a slow deployment…",{"value":66,"source":53,"evidence":67},"Free with size and bandwidth caps; a 100kb total cap was mentioned",[68,69],{"id":56,"by":11,"text":57},{"id":70,"by":11,"text":71},"25066789","Hi! Thanks so much for your comment! Could you expand a bit on what you'd like with A\u002FB testing? All of the values can be fetched across projects \u002F clients, it's essentially a…",{"value":73,"source":53,"evidence":74},"Slow deployments and hardcoded data cause bugs, incidents and time sinks",[75,76],{"id":56,"by":11,"text":57},{"id":63,"by":11,"text":64},[],"unknown","launched","team",{"praise":82,"objections":98,"requests":117,"questions":138,"alternatives":158},[83,91],{"value":84,"source":85,"evidence":86},"Clean, simple interface","commenter",[87],{"id":88,"by":89,"text":90},"25061411","mkintali","Clean interface, easy to use, nice work!",{"value":92,"source":85,"evidence":93},"Useful for avoiding slow deploys during incidents",[94],{"id":95,"by":96,"text":97},"25064571","santiagobasulto","I love this idea. I will express the ups and downs of it, and see if I'm missing something. First, some background: I'm a heavy Django user. Django has settings that are loaded…",[99,106,113],{"value":100,"source":85,"evidence":101},"Storing config outside version control loses audit trail",[102],{"id":103,"by":104,"text":105},"25060662","munro","I don't understand why people use config servers like this, instead of keeping it in version control. Keeping it in the repository allows me audit changes of everything. If you…",{"value":107,"source":85,"evidence":108},"No info on security, encryption or access control",[109],{"id":110,"by":111,"text":112},"25060880","camsjams","Do you store your API keys and other sensitive data with a site that doesn't even have a page discussing their encryption or security practices? Their privacy policy mentions…",{"value":114,"source":85,"evidence":115},"Availability and latency concerns as a runtime dependency",[116],{"id":95,"by":96,"text":97},[118,124,131],{"value":119,"source":53,"evidence":120},"Offline or fallback default values",[121],{"id":122,"by":11,"text":123},"25060588","If you try to fetch values and there is no connection nor ached values, the client won't be able to hit Config.ly's servers. I think it's a good idea to implement Config.ly with…",{"value":125,"source":85,"evidence":126},"Tier pricing with extra features",[127],{"id":128,"by":129,"text":130},"25070843","adrianvincent","This is such a cool idea. A simple web based database. If you introduced tier pricing with additional features, I would be willing to pay for this.",{"value":132,"source":85,"evidence":133},"A\u002FB testing and global keys across projects",[134],{"id":135,"by":136,"text":137},"25066740","prjed","Features that would be nice to have: A\u002FB Testing, Global config keys so Enterprise customers can use them across projects. Is there a size limit, do clients download changes or…",[139,154],{"value":140,"source":85,"evidence":141},"How does it compare to S3, Redis or a database?",[142,146,150],{"id":143,"by":144,"text":145},"25060792","jackthemuss","Just use S3",{"id":147,"by":148,"text":149},"25063166","netcraft","This is going to come across as dismissive, I don't mean it to - I'm sure im missing something. Is this more than a key value store with TTLs? Is it the UI over the top, the CMS…",{"id":151,"by":152,"text":153},"25064568","thrownaway954","you know what also allows you to never hardcode your data again... a database.",{"value":155,"source":85,"evidence":156},"What are the size limits and whether clients download whole files?",[157],{"id":135,"by":136,"text":137},[159,166,171,178],{"value":160,"source":85,"evidence":161},"Spring Cloud Config",[162],{"id":163,"by":164,"text":165},"25060603","nih0","spring cloud config is a good selfhosted alternative if u use java",{"value":167,"source":85,"evidence":168},"Plain S3 or a database",[169,170],{"id":143,"by":144,"text":145},{"id":151,"by":152,"text":153},{"value":172,"source":85,"evidence":173},"LaunchDarkly",[174],{"id":175,"by":176,"text":177},"25059452","cedricd","So if I understand correctly, I can define bits of JSON \u002F values in your interface. Then when my client app loads it'll hit your service backend to fetch them. Seems pretty…",{"value":179,"source":85,"evidence":180},"Vault, sops or Ansible Vault for secrets",[181,184],{"id":182,"by":104,"text":183},"25060824","Vault\u002Fk8s secrets for sensitive data--but you know, it really depends on the context for sensitive data, there isn't a simple answer to say what I've done across the board",{"id":185,"by":186,"text":187},"25064490","lukerohde","sops is a great tool for version-controlled secrets - plaintext keys and encrypted values using remote KMS to do the encryption. https:\u002F\u002Fgithub.com\u002Fmozilla\u002Fsops",{"comments":189,"answered":190,"key":191},32,11,[192,195,198],{"id":193,"text":194},"25061007","Thanks for the feedback. The goal right now is not to store sensitive data in Config.ly - your read API keys will be on your clients - and so in theory anyone who can read that…",{"id":196,"text":197},"25060911","Makes sense and you could definitely do that. I could be wrong, but I think some folks would want their other clients -- even their server -- retrieving that value from that one…",{"id":63,"text":64},{"commenters":200,"max_depth":201,"maker_replies":189,"first_comment_mins":40,"lifespan_hours":202},39,6,103,[204,206,210,213,214,216,218,219,223,226,229,231,234,235,238,240,241,243,247,251,253,256,258,261,263,266,268,271,272,274,276,278,280,282,285,289,291,294,296,300,303,305,307,310,312,314,316,319,321,325,328,329,331,334,336,340,341,344,346,348,350,352,355,357,359,362,365,367,369,370,372,376,378,382,385,389,391,393,395,396,398,400,403,406,408,410,414],[103,40,41,205,104,40],"project\u002Fcritical\u002Fidea",[207,40,40,208,209,40],"25060729","commenter\u002Fneutral\u002Fnone","axlee",[211,40,40,208,212,40],"25060737","makach",[182,40,40,208,104,40],[110,40,47,215,111,40],"project\u002Fneutral\u002Fprivacy",[217,40,40,208,104,40],"25060908",[193,40,40,215,11,41],[220,40,40,221,222,40],"25061173","commenter\u002Fneutral\u002Fprivacy","seer",[224,40,40,208,225,40],"25062985","dharmab",[227,40,40,208,228,40],"25064644","rad_gruchalski",[230,40,40,208,212,40],"25060731",[232,40,40,208,233,40],"25061429","crispyporkbites",[185,40,40,208,186,40],[236,40,40,208,237,40],"25060786","kall",[239,40,40,208,104,40],"25060878",[196,40,40,208,11,41],[242,40,41,205,237,40],"25061049",[244,40,47,245,246,40],"25062144","project\u002Fmixed\u002Fidea","michaelmior",[248,40,48,249,250,40],"25063639","project\u002Fpositive\u002Fdesign","asutekku",[63,40,40,252,11,41],"project\u002Fneutral\u002Fidea",[254,40,48,249,255,40],"25066629","bawejakunal",[257,40,40,208,11,41],"25066675",[259,40,48,260,255,40],"25071357","project\u002Fpositive\u002Fidea",[262,40,40,208,11,41],"25071448",[264,40,41,205,265,40],"25062740","specialist",[267,40,40,208,228,40],"25064630",[269,40,40,208,270,40],"25064646","bluehatbrit",[56,41,40,260,11,41],[273,41,48,260,212,40],"25060759",[275,41,40,208,11,41],"25060887",[95,32,47,277,96,40],"project\u002Fmixed\u002Fperformance",[279,32,47,252,228,40],"25064610",[281,32,41,205,96,40],"25065241",[283,32,40,284,11,41],"25064740","project\u002Fneutral\u002Fnone",[286,47,47,287,288,40],"25060351","project\u002Fneutral\u002Fdesign","soheil",[290,47,40,287,11,41],"25060370",[292,47,47,287,293,40],"25061895","kroltan",[295,47,40,208,11,41],"25062019",[297,47,40,298,299,40],"25062557","other\u002Fneutral\u002Fnone","philihp",[301,47,40,298,302,40],"25063039","mdaniel",[175,37,47,304,176,40],"project\u002Fneutral\u002Fperformance",[306,37,40,304,11,41],"25059515",[308,37,41,309,237,40],"25060720","project\u002Fcritical\u002Fperformance",[311,37,40,304,11,41],"25060885",[313,37,40,208,237,40],"25061138",[315,37,40,304,11,41],"25061180",[317,37,40,298,318,40],"25062085","mst",[320,37,40,208,11,41],"25062122",[322,48,41,323,324,40],"25060319","project\u002Fcritical\u002Fpricing","lhball",[326,48,40,327,11,41],"25060359","project\u002Fneutral\u002Fpricing",[147,201,47,252,148,40],[330,201,40,252,11,41],"25063247",[332,38,48,260,333,40],"25063614","Arkdy",[335,38,40,208,11,41],"25105781",[337,338,47,304,339,40],"25060532",8,"capableweb",[122,338,40,304,11,41],[342,338,47,304,343,40],"25062496","0x62",[345,338,40,208,11,41],"25062509",[347,338,47,304,339,40],"25063062",[349,338,40,208,11,41],"25063169",[151,30,40,351,152,40],"other\u002Fneutral\u002Fidea",[353,30,40,354,11,41],"25064817","commenter\u002Fneutral\u002Fidea",[163,33,40,356,164,40],"other\u002Fcritical\u002Fidea",[358,33,40,354,11,41],"25060652",[360,33,41,205,361,40],"25061144","jacques_chester",[363,33,40,364,11,41],"25061445","maker\u002Fpositive\u002Fnone",[366,33,40,208,361,40],"25061460",[368,33,40,208,11,41],"25061515",[88,190,48,249,89,40],[371,190,40,208,11,41],"25061486",[373,374,41,205,375,40],"25066477",12,"gitgud",[377,374,40,354,11,41],"25066540",[379,31,47,380,381,40],"25061123","maker\u002Fneutral\u002Fdocs","cle",[383,31,40,384,11,41],"25061430","maker\u002Fneutral\u002Fnone",[386,387,47,287,388,40],"25059732",14,"samihaija",[390,387,40,287,11,41],"25059825",[392,387,48,249,388,40],"25060861",[135,394,47,252,136,40],15,[70,394,40,304,11,41],[397,394,47,252,136,40],"25069572",[399,394,40,252,11,41],"25070731",[128,401,48,402,129,40],16,"project\u002Fpositive\u002Fpricing",[404,401,40,405,11,41],"25071241","maker\u002Fneutral\u002Fpricing",[143,407,41,205,144,40],17,[409,407,40,249,11,41],"25060974",[411,407,41,412,413,40],"25102433","project\u002Fcritical\u002Fprivacy","yellat_chris",[415,416,48,260,413,40],"25102384",18,[],[419,424,428,433,437,441],{"id":420,"name":421,"points":422,"category":423},"25059554","22120",537,"infrastructure",{"id":425,"name":426,"points":427,"category":20},"25059133","Etebase",308,{"id":429,"name":430,"points":431,"category":432},"25013863","Please-unsubscribe.com",218,"productivity",{"id":434,"name":435,"points":436,"category":432},"25023502","Baller ToDo",161,{"id":438,"name":439,"points":440,"category":432},"25058821","The Least Dangerous To-Do List",141,{"id":442,"name":443,"points":444,"category":445},"25004554","Sir",115,"data",false,"v2",{"id":449,"name":5,"line":6,"ai":446,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":450,"top":18,"kw":451,"maker":11,"domain":10,"tier":19,"attempts":40,"strip":452,"url":9,"mix":453,"praise":84,"objection":100,"sub":21},25059296,-0.03,[24,25,21,26],"1030000155510531333100135333010513353513",[30,31,32,33],1794036598293]